package com.example.demo.common.page;

import java.io.Serializable;
import java.util.List;
import java.util.Collections;

/**
 * 分页结果
 */
public class PageResult<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    /** 总记录数 */
    private long total;
    
    /** 当前页码 */
    private int pageNum;
    
    /** 每页记录数 */
    private int pageSize;
    
    /** 总页数 */
    private int pages;
    
    /** 数据列表 */
    private List<T> list;
    
    /**
     * 默认构造方法
     */
    public PageResult() {
    }
    
    /**
     * 构造方法
     * 
     * @param list 数据列表
     * @param total 总记录数
     * @param pageNum 当前页码
     * @param pageSize 每页记录数
     */
    public PageResult(List<T> list, long total, int pageNum, int pageSize) {
        this.list = list;
        this.total = total;
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.pages = (int) Math.ceil((double) total / pageSize);
    }
    
    /**
     * 构造方法
     * 
     * @param list 数据列表
     * @param total 总记录数
     * @param pageRequest 分页请求
     */
    public PageResult(List<T> list, long total, PageRequest pageRequest) {
        this(list, total, pageRequest.getPageNum(), pageRequest.getPageSize());
    }
    
    /**
     * 空结果
     */
    public static <T> PageResult<T> empty() {
        return new PageResult<>(Collections.emptyList(), 0, 1, 10);
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }
} 